package com.sse.sensor.impl;

import java.util.Random;

import com.sse.sensor.Sensor;
import com.sse.sensor.TipoSensor;
import com.sse.sensor.event.SensorEvent;
import com.sse.util.TramaUtil;

/**
 *  Clase que define un sensor tipo antena. Este sensor lo que se encarga
 *  basicamente es recibir la senal de un RFID, se podria decir que este 
 *  sensor indica Claramente si un RFID se ha salido del area permitido o
 *  se encuentra al interior.
 * @author Paul
 *
 */
public class SensorAntena extends Sensor{
	
	/** Constante que define el evento de RFID sale del area permitida. */
	public static final long SALE_RANGO = 1;
	
	/** Constante que define el evento de RFID dentro del area permitida */
	public static final long AREA_PERMITIDA=2;
	
	/** Objeto random para el manejo de numeros aleatorios. */
	private Random random;	
	
	private long rfId;

	
	public SensorAntena() {
		random = new Random();	
		this.tipoSensor = TipoSensor.ANTENA;
	}

	@Override
	public long calcularEvento() {
						
		double gaussian = random.nextGaussian();
			
		//3 desviaciones estandar de la media, 1% de probabilidad
		if(Math.abs(gaussian) >= 2.5){			
			return SALE_RANGO;
		}
		else if(Math.abs(gaussian) < 2.5){
			return AREA_PERMITIDA;
		}
		
		else return SIN_EVENTO;
	}
	
	@Override
	public void run() {
		long evento = this.calcularEvento();	
		
		if(evento != SIN_EVENTO){			
			fireSensorEvent(new SensorEvent(TramaUtil.convertirValoresATrama(this.casaId, this.id, evento, this.tipoSensor, this.rfId)));
		}		
	}
	
	
	public void setRfId(long rfId) {
		this.rfId = rfId;
	}
	
	public long getRfId() {
		return rfId;
	}

}
